package everyday;

import cn.hutool.core.util.StrUtil;
import entity.Man;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 集合操作
 *
 * @author gaojie
 * @date 2023-06-30
 */
public class ListOperation {

    /**
     * 测试 peek 用法，因为有些场景 stream 不能 foreach，所以 peek
     */
    @Test
    void test01() {
        final ArrayList<Man> list = new ArrayList<>();
        final Man man = new Man();
        man.setName("AA");
        man.setId(1);
        list.add(man);
        final Man man2 = new Man();
        man2.setName("BB");
        man2.setId(2);
        list.add(man2);
        System.out.println(list);

        final List<Man> cc = list.stream().peek(e -> e.setName("CC")).collect(Collectors.toList());
        System.out.println(cc);
    }

    /**
     * 测试两个list的元素有一一对应，删除第一个里面的元素时，第二个也要删除
     * 结果：使用倒序遍历最稳，不会报错，逻辑最简单
     */
    @Test
    void test02() {
        List<String> list1 = new ArrayList<>();
        list1.add("a.pdf");
        list1.add("b.pdf");
        list1.add("c.xml");
        list1.add("d.xml");
        List<String> list2 = new ArrayList<>();
        list2.add("/fheb/a.pdf");
        list2.add("/fheb/b.pdf");
        list2.add("/fheb/c.xml");
        list2.add("/fheb/d.xml");
        System.out.println(list1);
        System.out.println(list2);
        // 倒序遍历删除
        for (int i = list1.size() - 1; i >= 0; i--) {
            if (!StrUtil.endWithAny(list1.get(i), supportExtArray)) {
                list1.remove(i);
                list2.remove(i);
            }
        }
        System.out.println(list1);
        System.out.println(list2);
    }

    private static final String[] supportExtArray = {"pdf", "jpg", "jpeg", "png", "bmp"};
}
